/**
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved. <br/>
 * 描述: TODO <br/>
 *
 * @author framework generator
 * @date 2022年02月15日
 * @version 2.0
 */
package com.icinfo.cloud.provider.punish.ucase.casemain.mapper;

import com.icinfo.cloud.provider.punish.api.dto.CaseEnforceDocPageListForOilQueryDto;
import com.icinfo.cloud.provider.punish.api.vo.CaseActsCodePunishInfoVo;
import com.icinfo.cloud.provider.punish.api.vo.CaseEnforceDocForOilVo;
import com.icinfo.cloud.provider.punish.common.documentdataload.dto.CaseDocumentRecordCommonQueryDto;
import com.icinfo.cloud.provider.punish.config.vo.ConfigBusiParamDocumentInfoVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.dto.*;
import com.icinfo.cloud.provider.punish.ucase.casemain.model.CaseDocumentRecord;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.*;
import com.icinfo.cloud.provider.punish.ucase.punishdecide.vo.CaseDecideInfoVo;
import com.icinfo.framework.mybatis.mapper.common.Mapper;
import org.apache.ibatis.annotations.Param;


import java.util.List;
import java.util.Map;

/**
 * 描述: 案件文书记录表-TRJ case_document_record 对应的Mapper接口.<br>
 *
 * @author framework generator
 * @date 2022年02月15日
 */
public interface CaseDocumentRecordMapper extends Mapper<CaseDocumentRecord> {

    /**
     * 【V1.0.0】描述：查询案件阶段环节关联文书信息
     *
     * @param queryDto {@link CaseStageLinkRelateDocumentQueryDto}
     * @return {@link List < CaseStageLinkRelateDocumentVo >} 案件阶段环节关联文书信息
     * @author xiangyuyu
     * @date 2022-02-24 14:29
     */
    List<CaseStageLinkRelateDocumentVo> selectCaseStageLinkRelateDocumentInfo(CaseStageLinkRelateDocumentQueryDto queryDto);

    /**
     * 描述：查询文书记录
     *
     * @param queryDto 查询dto
     * @return {@link CaseDocumentRecordDetailVo }
     * @author shishengyao
     * @date 2022/03/04
     */
    CaseDocumentRecordDetailVo selectCaseDocumentRecordDetail(CaseDocumentRecordQueryDto queryDto);

    /**
     * 描述：获取案件有效文书列表
     *
     * @param caseId 案件id, caseAssistId 案件副流程id
     * @return {@link List<CaseDocumentRecord> }
     * @author shishengyao
     * @date 2022/04/07
     */
    List<CaseDocumentRecordDto> selectCaseDocumentRecordDto(@Param("caseId") String caseId, @Param("caseAssistId") String caseAssistId);


    /**
     * 根据caseId和documentKindCode获取文书记录
     *
     * @param caseId           用例id
     * @param documentKindCode 文件类型代码
     * @return {@link CaseDocumentRecord }
     * @author shishengyao
     * @date 2022/04/10
     */
    CaseDocumentRecordDto selectCaseDocumentRecordByKindCode(@Param("caseId") String caseId, @Param("documentKindCode") String documentKindCode);


    /**
     * 根据caseId和documentKindCode、partyId获取文书记录
     *
     * @param caseId           用例id
     * @param documentKindCode 文件类型代码
     * @param partyId 当事人ID
     * @return {@link CaseDocumentRecord }
     */
    CaseDocumentRecordDto selectCaseDocumentRecordByKindCodeAndPartyId(@Param("caseId") String caseId, @Param("documentKindCode") String documentKindCode, @Param("partyId")String partyId);

    /**
     * 描述：获取指定文书种类的文书记录
     *
     * @param documentKindCode 文书目录编码
     * @param sentDate         指定送达日期
     * @param createDate       文书创建日期
     * @return {@link List<CaseDocumentRecordVo>} 文书记录
     * @author xiangyuyu
     * @date 2022-04-14 11:04
     */
    List<CaseDocumentRecordVo> selectCaseDocumentRecordListWithKindCode(@Param("documentKindCode") String documentKindCode, @Param("sentDate") String sentDate,@Param("createDate") String createDate);


    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的调查信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> selectCaseIdListShouldReportInvestigateInfo();

    /**
     * 【V1.5.0】描述：获取案件id列表-需要上报的调查信息-refactor
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> selectCaseIdListShouldReportInvestigateInfoRefactor();

    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的调查信息
     *
     * @return {@link List<String>} 案件id列表
     * @author mahan
     * @date 2022-10-20 16:02
     */
    List<String> selectReportInvestigateInfoCaseIdList(@Param("punishDecideCaseIdList") List<String> punishDecideCaseIdList);

    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的告知信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> selectCaseIdListShouldReportInformInfo();

    /**
     * 【V1.5.0】描述：获取案件id列表-需要上报的告知信息-refactor
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> selectCaseIdListShouldReportInformInfoRefactor();

    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的告知信息
     *
     * @return {@link List<String>} 案件id列表
     * @author mahan
     * @date 2022-10-20 16:02
     */
    List<String> selectReportInformInfoCaseIdList(@Param("punishDecideCaseIdList") List<String> punishDecideCaseIdList);

    /**
     * 【V2.0.0】描述：获取案件id列表-需要上报的听证类告知信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-06-15 10:30
     */
    List<String> selectCaseIdListShouldReportHearingInformInfo();
    /**
     * 【V1.5.0】描述：获取案件id列表-需要上报的听证类告知信息-refactor
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-06-15 10:30
     */
    List<String> selectCaseIdListShouldReportHearingInformInfoRefactor();

    /**
     * 【V2.0.0】描述：获取案件id列表-需要上报的听证类告知信息
     *
     * @return {@link List<String>} 案件id列表
     * @author mahan
     * @date 2022-10-20 19:30
     */
    List<String> selectReportHearingInformCaseIdList(@Param("punishDecideCaseIdList") List<String> punishDecideCaseIdList);


    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的决定信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> selectCaseIdListShouldReportDecideInfo();

    /**
     * 描述： 获取超过10日未送达的决定案件列表
     *
     * @author: zhengqiang
     * @date: 2023/5/24
     * @return {@link List< CaseDecideInfoVo>}
     **/
    List<CaseDecideInfoVo> selectCaseDecideInfoListAfterTenDays();

    /**
     * 【V1.5.0】描述：获取案件id列表-需要上报的决定信息-refactor
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> selectCaseIdListShouldReportDecideInfoRefactor();

    /**
     * 【V1.1.0】描述：获取文书48小时提示信息
     *
     * @return
     * @author lxj
     * @date 2022-04-28 16:02
     */
    List<Map<String,String>> selectExpireDoc();

    /**
     * 获取昨天已结案的授权委托书记录列表
     *
     * @author: zhengqiang
     * @date: 2022/5/24
     * @return {@link List< CaseDocumentRecordQueryDto>}
     **/
    List<CaseDocumentRecordQueryDto> selectDocAuthedEntrustOfYesterdayEndCase();

    /**
     * 获取已失效的送达方式及地址确认书记录列表
     *
     * @author: zhengqiang
     * @date: 2022/5/25
     * @return {@link List< CaseDocumentRecordQueryDto>}
     **/
    List<CaseDocumentRecordQueryDto> selectDocSendInfoConfirmOfInvalid();

    /**
     *
     * @param caseId
     * @param partyId
     * @return
     */
    int getExecuteDocumentRecordCount(@Param("caseId") String caseId, @Param("partyId") String partyId);

    /**
     * 查询案例文档记录的细节
     *
     * @param queryDto 查询dto
     * @return {@link CaseDocumentRecordDetailVo }
     * @author shishengyao
     * @date 2022/03/04
     */
    List<CaseDocumentRecordDetailVo> selectCaseDocumentRecordDocNumberInfoList(CaseDocumentRecordCommonQueryDto queryDto);

    /**
     * 【V1.3.0】描述：根据环节编码撤回文书记录
     * @author tianrunjia
     * @date 2022-06-27
     * @return
     */
    void updateRecallCaseDocumentRecordByCaseLinkCode(@Param("caseId") String caseId, @Param("caseLinkCode") String caseLinkCode, @Param("documentCatalogCodes") List<String> documentCatalogCodes);


    /**
     * 描述：获取app文书记录
     *
     * @param dto {@link AppCaseDocumentRecordDto}
     * @return List<AppCaseBeforeDocumentRecordVo> app文书记录
     * @author xiangyuyu
     * @date 2022-06-30 20:43
     */
    List<AppCaseBeforeDocumentRecordVo> selectAppCaseBeforeDocumentRecordList(@Param("dto") AppCaseDocumentRecordDto dto);

    /**
     * 描述：根据指定条件查询文书记录信息
     *
     * @param queryDto {@link CaseDocumentRecordQueryDto}
     * @return List<CaseDocumentRecordVo> 文书记录信息
     * @author xiangyuyu
     * @date 2022-07-01 14:28
     */
    List<CaseDocumentRecordVo> selectCaseDocumentRecordList(@Param("queryDto") CaseDocumentRecordQueryDto queryDto);

    /**
     * 描述：根据指定条件查询撤销文书记录信息
     *
     * @param queryDto {@link CaseDocumentRecordQueryDto}
     * @return List<CaseDocumentRecordVo> 文书记录信息
     * @author xiangyuyu
     * @date 2022-07-01 14:28
     */
    List<CaseDocumentRecordVo> selectCaseDocumentRecordCxjdfList(@Param("queryDto") CaseDocumentRecordQueryDto queryDto);

    /**
     * 【V1.3.0】描述：获取可以撤回的文书送达记录
     * @author tianrunjia
     * @date 2022-06-27
     * @return
     */
    List<CaseDocumentRecord> selectCaseDocumentRecordListWithSentRecord(@Param("caseId") String caseId,@Param("caseLinkCode") String caseLinkCode,@Param("documentRecordStatus") String documentRecordStatus);

    /**
     * 【V1.4.1】描述：副流程开始后更新副流程id
     * @author tianrunjia
     * @Date 2022-08-24
     */
    void updateCaseDocumentRecordWithAssistStart(@Param("caseId") String caseId, @Param("catalogCode") String catalogCode, @Param("caseAssistId") String caseAssistId
            , @Param("caseStageName") String caseStageName, @Param("caseStageCode") String caseStageCode
            , @Param("caseLinkName") String caseLinkName, @Param("caseLinkCode") String caseLinkCode);

    /**
     * 【V1.4.1】描述：根据案件id获取案件阶段的所有有效文书
     * @author tianrunjia
     * @Date 2022-08-27
     */
    List<CaseDocumentCatalogChainDetailVo> selectAllCaseDocumentInfoEffectiveByCaseId(String caseId);

    /**
     * 描述： 根据案件id和文书目录获取文书列表
     *
     * @author: zhengqiang
     * @date: 2022/9/26
     * @param: caseId
     * @param: documentKindCode
     * @return {@link List< CaseDocumentRecordDto>}
     **/
    List<CaseDocumentRecordDto> selectCaseDocumentRecordListByKindCode(@Param("caseId") String caseId, @Param("documentKindCode") String documentKindCode);

    /**
     * 描述： 根据案件id获取涉刑文书列表
     *
     * @param caseId 案件id
     * @return {@link List<CaseDocumentRecordDto> }
     * @author shishengyao
     * @date 2022/10/10
     */
    List<CaseDocumentRecordCriminalDto> selectCaseDocumentRecordListByCaseId(@Param("caseId") String caseId);
    /**
     * 查询审批中的文书
     * @author liyafeng
     * @date 2022/10/22
      * @param caseId
     * @return {@link List< CaseDocumentRecord>}
     */
    List<String> selectCaseDocumentRecordContainPendingList(@Param("caseId") String caseId);

    /**
     * 根据caseId和documentKindCode获取文书记录
     *
     * @param queryDto 查询dto
     * @return {@link List<CaseDocumentRecordDto> }
     * @author shishengyao
     * @date 2022/10/24
     */
    List<CaseDocumentRecordDto> selectDocumentRecordDtoList(CaseDocumentRecordQueryDto queryDto);

    /**
     * 查询案件处罚决定文书审核通过的记录
     * @param caseId
     * @return
     */
    List<CaseActsCodePunishInfoVo> selectPunishDocumentAuditPassList(@Param("caseId") String caseId);

    /**
     * 获取最新有效的速结告知书
     *
     * @param caseId
     * @param catalogCode
     * @return
     */
    CaseDocumentRecord getNewestValidRecord(@Param("caseId") String caseId, @Param("catalogCode") String catalogCode);

    /**
     * 【1.9.4】描述：专题查询-文书查询
     *
     * @param dto {@link CaseDocumentPageDto}
     * @return {@link List<PageCaseDocumentVo>}
     * @author cds
     * @date 2022/12/9
     * @version 1.9.4
     */
    List<PageCaseDocumentVo> pageCaseDocumentRecord(@Param("param") CaseDocumentPageDto dto);

    /**
     * 获取行政决定履行催告书信息
     * @param caseId
     * @return
     */
    JCFKJDSDocData getXzjdlxcgsData(@Param("caseId") String caseId,@Param("partyId") String partyId,@Param("handleType") String handleType);

    /**
     * 【V1.10.0】描述：根据案件id获取案件详情中案件阶段的所有文书
     * @author tianrunjia
     * @Date 2022-12-11
     */
    List<CaseDocumentRecordInfo> selectCaseDetailStageDocumentRecordByCaseId(@Param("caseId") String caseId, @Param("busiParamId") String busiParamId);

    /**
     * 案件移送文书查询
     *
     * @param caseId 案件id
     * @return java.util.List<com.icinfo.cloud.provider.punish.ucase.casemain.dto.CaseDocumentRecordCriminalDto>
     * @author liuyongfei
     * @date 2022/12/15
     */
    List<CaseDocumentRecordCriminalDto> selectTransferCaseDocumentRecordListByCaseId(@Param("caseId") String caseId);

    /**
     * 查询速结程序证据名称
     *
     * @author yangsizhen
     * @date 2022/12/29
     * @param caseId 案件id
     * @return java.util.List<com.icinfo.cloud.provider.punish.config.vo.ConfigBusiParamDocumentInfoVo>
     */
    List<ConfigBusiParamDocumentInfoVo> getQuickEvidenceName(@Param("caseId") String caseId);

    /**
     * 根据stageCode，查询文书列表
     * @param caseId
     * @param stageCode
     * @return
     */
    List<CaseDocumentRecordCodeNameVo> getCaseDocumentRecordByStageCode(@Param("caseId") String caseId, @Param("stageCode") String stageCode, @Param("busiParamId") String busiParamId);

    /**
     * 【AJ-V1.1.1】作废某阶段排除某些文书的所有文书
     * @param caseId
     * @param caseStageCode
     * @param excludeDocumentCatalogCodes
     */
    void updateCaseDocumentRecordOfChangeWorkFlow(@Param("caseId") String caseId, @Param("caseStageCode") String caseStageCode, @Param("excludeDocumentCatalogCodes") List<String> excludeDocumentCatalogCodes);

    /**
     * 描述： 查询实施行政强制措施决定书记录
     *
     * @author: zhengqiang
     * @date: 2023/5/24
     * @param: queryDto
     * @return {@link List< CaseEnforceDocForOilVo>}
     **/
    List<CaseEnforceDocForOilVo> selectCaseEnforceDocList(CaseEnforceDocPageListForOilQueryDto queryDto);
    /**
     * 根据caseID查询文书列表
     *
     * @param caseId
     * @param stageCode
     * @param busiParamId 商业参数id
     * @return {@link List<CaseDocumentRecordKindInfoVo> }
     * @author shishengyao
     * @date 2023/04/21
     */
    List<CaseDocumentRecordKindInfoVo> selectCaseDocumentRecordWithKindInfoByByStageCode(@Param("caseId") String caseId, @Param("stageCode") String stageCode, @Param("busiParamId") String busiParamId);

    /**
     * 【V1.12.1】描述：根据案件id简案快办证据文书列表
     *
     * @param caseId
     * @return {@link List<CaseDocumentRecordDetailVo> }
     * @author shishengyao
     * @date 2023/09/06
     */
    List<CaseDocumentRecordDetailVo> selectFastCaseEvidenceDocumentList(@Param("caseId") String caseId);
}
